package k8s

import (
	"context"

	corev1 "k8s.io/api/core/v1"
	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
	core "k8s.io/client-go/kubernetes/typed/core/v1"
)

func NewSecret(c *kubernetes.Clientset) *Secret {
	return &Secret{
		core: c.CoreV1(),
	}
}

type Secret struct {
	core core.CoreV1Interface
}

// 获取Secret列表
func (s *Secret) GetSecrets(ctx context.Context, namespace string, req *v1.ListOptions) (*corev1.SecretList, error) {
	return s.core.Secrets(namespace).List(ctx, *req)
}

// 获取Secret详情
func (s *Secret) GetSecretDetails(ctx context.Context, namespace, name string) (*corev1.Secret, error) {
	return s.core.Secrets(namespace).Get(ctx, name, v1.GetOptions{})
}

// 创建Secret
func (s *Secret) CreateSecret(ctx context.Context, namespace string, secret *corev1.Secret) (*corev1.Secret, error) {
	return s.core.Secrets(namespace).Create(ctx, secret, v1.CreateOptions{})
}

// 更新Secret
func (s *Secret) UpdateSecret(ctx context.Context, namespace string, secret *corev1.Secret) (*corev1.Secret, error) {
	return s.core.Secrets(namespace).Update(ctx, secret, v1.UpdateOptions{})
}

// 删除Secret
func (s *Secret) DeleteSecret(ctx context.Context, namespace, name string) error {
	return s.core.Secrets(namespace).Delete(ctx, name, v1.DeleteOptions{})
}

// 更新Secret的标签
func (s *Secret) UpdateSecretLabels(ctx context.Context, namespace, name string, labels map[string]string) (*corev1.Secret, error) {
	secret, err := s.GetSecretDetails(ctx, namespace, name)
	if err != nil {
		return nil, err
	}
	secret.Labels = labels
	return s.UpdateSecret(ctx, namespace, secret)
}
